﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication27
{
    public partial class Liczba
    {

        public static Liczba operator -(Liczba a, Liczba b)
        {
            List<ulong> wynik = new List<ulong>();
            int i = 0;
            Liczba c;
            if (a.znak == b.znak)
            {
                
                char znak = '+';


                int ktoraodktorej = Pomoce.Porownaj(a, b);
                if (ktoraodktorej == 0) { c = a; a = b; b = c; znak = '-'; }
                else if (ktoraodktorej == 2) { return new Liczba(a.system); }

                a.element.Reverse();
                b.element.Reverse();


                ulong reszta = 0;
                ulong wynikodejmowania = 0;





                int counta = a.element.Count();
                int countb = b.element.Count();


                for (; i < counta && i < countb; i++)
                {

                    long posredni = (long)a.element[i] - (long)b.element[i] - (long)reszta;

                    reszta = 0;

                    if (posredni < 0) { posredni = posredni + (long)a.system; reszta = 1; }

                    long posredniAbs = Math.Abs(posredni);

                    wynikodejmowania = Convert.ToUInt64(posredniAbs) % a.system;



                    wynik.Add(wynikodejmowania);



                }


                Liczba x = (a.element.Count > b.element.Count) ? a : b;
                int countx = x.element.Count();

                while (i < countx)
                {
                    if (reszta == 1)
                    {
                        long posredni = (long)x.element[i] - (long)reszta;

                        reszta = 0;

                        if (posredni < 0) { posredni = posredni + (long)x.system; reszta = 1; }
                        long posredniAbs = Math.Abs(posredni);


                        wynikodejmowania = Convert.ToUInt64(posredniAbs) % a.system;

                        wynik.Add(wynikodejmowania);
                    }
                    else wynik.Add(x.element[i]);
                    i++;
                }


                i = 0;

                wynik.Reverse();

                while (11 == 11)
                {
                    try
                    {
                        if (wynik[i] == 0) wynik.RemoveAt(i);
                        else break;
                    }
                    catch (Exception e) { wynik.Add(0); break; }

                }

                a.element.Reverse();
                b.element.Reverse();


                return new Liczba(wynik, a.system, znak);
            }
            else
            {
                int jakiznak = Pomoce.Porownaj(a, b);
                if (a.znak == '-') { a.znak = b.znak = '-'; a = a + b; return a; }
                else { a.znak = b.znak = '+'; a = a + b; return a; }

                

               

            }
        }
    }
}
